<?php

class Backend_Control_Project extends Sistema_Modulo {

	/**
	 * index
	 * 
	 * @abstract todos os modulos tem uma funcao chamada index que eh executada semper
	 * que uma funcao chamada do modulo nao existe.
	 * 
	 * 
	 * Nessa tela sempre eh listado as iformacostaes que o modulo gerencia
	 * 
	 * @return void
	 */
	public function index()
	{
		
	}	

	/**
	 * listar
	 * 
	 * @abstract Lista todos os projetos no qual o usu�rio logado tem alguma participacao
	 * Existem duas tabelas, uma naquela que ele eh o dono e outra na qual ele eh 
	 * apenas participante.
	 * 
	 * @return void
	 */
	public function listar()
	{
		$tplFile = SISTEMA_DIR."backend/view/project/list.tpl.html";
		$tela = new Sistema_Layout_Tela($tplFile);

		$sql = "
		SELECT
			p.prj_id,
			prj_title,
			prj_objetive,
			DATE_FORMAT(prj_timestamp, '%d/%m/%Y') as prj_timestamp,
			prjusr_role,
			prj_published,
			prj_shortname,
			prjusr_active
		FROM project p
			INNER JOIN project_user pu ON
			   pu.prj_id = p.prj_id
	    WHERE
	       pu.usr_id = ".Sistema_Login::getId()." 
       ORDER BY prj_title";
		
		$projects = Sistema_Conecta::select($sql);

		// retirado por enquanto a parte do tree em js
		
		if(is_array($projects)){		
			foreach($projects as $k=>$v) {
				
				$obj = substr($v['prj_objetive'],0,255);
				
				if(strlen($v['prj_objetive']) >= 255){
					$obj .= "...";
				}
				
				$html .= "<tr>";
				$html .= "<td>".$v['prj_id']."</td>";
				$html .= "<td>".$v['prj_title']."</td>";
				$html .= "<td>".$obj."</td>";
				$html .= "<td>".$v['prj_timestamp']."</td>";
				
				$public = "<div id='projectOn'>".Sistema_I386::getString('msg_published')."</div>";
				if(!$v['prj_published']){
					$public = "<div id='projectOff'>".Sistema_I386::getString('msg_unpublished')."</div>";
				}
				
				$html .= "<td valign='absmiddle'>".$public."</td>";
				
				$html .= "<td>".Sistema_I386::getString("msg_".$v['prjusr_role'])."</td>";

				$html .= "<td>";
				
				if($v['prjusr_active'] == 1){
					$html .= self::getOpcoesMenuProjeto($v['prj_id']);
				} else {
					$html .= "<em style='color: yellow; background-color: #333; padding: 2px'>".Sistema_I386::getString('msg_waiting_aprovation')."</em>";
				}
		
				$html .= "</td>";
				$html .= "</tr>";
			}
		} else {
			$html = "<tr><td colspan='3'>".Sistema_I386::getString('msg_empty_list')."</td>";
		}
		
		$tela->addVar("projects",$html);		
		
		$this->_layout->setCorpo($tela->getTela());		
	}
	
	/**
	 * altearStatusPublicacao
	 * 
	 * @abstract Alterar o status de publicado do projeto 
	 * 
	 * @return void
	 */
	public function altearStatusPublicacao()
	{
		$prj_id = Sistema_Variavel::get('prj_id');

		# verificar se quem esta logado eh o dono do projeto e pegar o status atual da publicacao
		$sql = "
		SELECT
			prj_published
		FROM project p
			INNER JOIN project_user pu ON
			   pu.prj_id = p.prj_id
	    WHERE
	       pu.usr_id = ".Sistema_Login::getId()."
	       AND p.prj_id = ".$prj_id."
	       AND prjusr_role = '".ROLE_OWNER."'";
		
		$result = Sistema_Conecta::select($sql);
		
		# nao achou ninguem eh tentativa de zuar com o bagulho
		if(!sizeof($result)){
			$this->_msg->setErro("You are not the owner of the project.");
		} else {
			# atualizar o status da publicacao para o oposto do que esta hoje
			if($result[0]['prj_published'] == '0'){
				$string_msg = 'msg_project_published';
				$prj_published = '1';
			} else {
				$string_msg = 'msg_project_unpublished';
				$prj_published = '0';
			}
			
			$sql = "UPDATE project SET prj_published = ".$prj_published." WHERE prj_id = ".$prj_id;

			Sistema_Conecta::executa($sql);

			$this->_msg->setSucesso(Sistema_I386::getString($string_msg));
			
			$url = SISTEMA_URL."index.php?m=Bproject&c=listar";
			header("Location:".$url);
			die();
		}
	}

	/**
	 * formulario
	 * 
	 * @abstract Formulario para o cadastro de um novo SE
	 * 
	 * @return void
	 */
	public function formulario($prj_id = null)
	{
		$cod = ($prj_id != null) ? $prj_id : Sistema_Variavel::get('prj_id');

		if($cod){
			$project = new Backend_Model_Project();
			$_POST = $project->select($cod);
		}

		$tplFile = SISTEMA_DIR."backend/view/project/project.tpl.html";
		$tela = new Sistema_Layout_Tela($tplFile);

		if($cod){
			$sql = "
			SELECT
			   skl_title
		   	FROM project_skill ps 
		   		INNER JOIN skill s ON
		   			s.skl_id = ps.skl_id
	   		WHERE
	   			prj_id = ".$cod." 
   			ORDER BY prjskl_id";
			
			$cat = Sistema_Conecta::select($sql);
			
			$a = array();
			foreach($cat as $c){
				$a[] = $c['skl_title'];
			}

			$skl_skills = implode("; ",$a);
		}
		
		$tela->addVar('select_skill',$skl_skills);
		
		if($cod){
			$tela->addVar('menu',self::getOpcoesMenuProjeto($cod));
		}
		
		$this->_layout->setCorpo($tela->getTela());
	}

	/**
	 * salvar
	 * 
	 * @abstract Persiste na tabela project os dados do projeto
	 * 
	 * @return void
	 */
	public function salvar()
	{
		$project = new Backend_Model_Project();

		$project->prj_id           = Sistema_Variavel::get('prj_id');
		$project->skl_id           = Sistema_Variavel::get('skl_id');
		$project->prj_title        = Sistema_Variavel::get('prj_title');
		$project->prj_objetive     = Sistema_Variavel::get('prj_objetive');
		$project->prj_shortname    = Sistema_Variavel::get('prj_shortname');
		$project->prj_published    = '0';

		$_POST['prj_id'] = $project->save();

		if($_POST['prj_id']){

			$this->_msg->setSucesso(Sistema_I386::getString('msg_project_save'));

			// salvar as categorias
			$categorias = explode(";",$_POST['prj_skills']);
			
			$sql = "DELETE FROM project_skill WHERE prj_id = ".$_POST['prj_id'];
			Sistema_Conecta::executa($sql);

			if(is_array($categorias)){
				
				foreach($categorias as $c){
					
					$c = trim($c);
					
					// ver se existe 
					$sql = "SELECT skl_id FROM skill WHERE skl_title = '".ucfirst($c)."'";
					
					$skl_id = Sistema_Conecta::select($sql);
					
					$skl_id = $skl_id[0]['skl_id'];

					// se nao existe salva
					if(!$skl_id){
						$sql = "INSERT INTO skill SET  skl_title = '".ucfirst($c)."'";
						$skl_id = Sistema_Conecta::executa($sql);
					}
					
					// VERIFICAR SE JA NAO TEM O SKILL NO PROJETO
					$sql = "SELECT prjskl_id FROM project_skill WHERE prj_id = ".$_POST['prj_id']." AND skl_id = ".$skl_id;
					$prjskl_id = Sistema_Conecta::select($sql);
					
					if(!$prjskl_id[0]['prjskl_id']){					
						// salva a categoria no projeto
						$sql = "INSERT INTO project_skill SET skl_id = ".$skl_id.", prj_id = ".$_POST['prj_id'];
						Sistema_Conecta::executa($sql);
					} 
				}
			}
		} else {
			$this->_msg->setErro(Sistema_I386::getString('msg_project_unsave'));
		}

		$url = SISTEMA_URL."index.php?m=Bproject&c=formulario&prj_id=".Sistema_Variavel::get('prj_id');
		header("Location:".$url);
		die();	
	}

	/**
	 * listarusuarios
	 * 
	 * @abstract lista todos os usuarios de um projeto
	 * 
	 * @return void 
	 */
	public function listarusuarios()
	{
		$prj_id = Sistema_Variavel::get('prj_id');

		$tplFile = SISTEMA_DIR."backend/view/project/listuser.tpl.html";
		$tela = new Sistema_Layout_Tela($tplFile);
		
		# seleciona todos os uusuarios do projeto
		$sql = "
		SELECT
			u.usr_id,
			usr_name,
			usr_email,
			prjusr_role,
			prjusr_id,
			prjusr_active 	
		FROM project_user pu 
			INNER JOIN user u ON
			   pu.usr_id = u.usr_id
	    WHERE
	       pu.prj_id = ".$prj_id;
		
		$result = Sistema_Conecta::select($sql);

		$array['Owner']        = Sistema_I386::getString('msg_Owner');
		$array['Collaborator'] = Sistema_I386::getString('msg_Collaborator');				
		
		$html = "";
		foreach ($result as $user)
		{
			$html .= "<tr>";
			$html .= "<td>".$user['usr_id']."</td>";	
			$html .= "<td>".ucwords(strtolower($user['usr_name']))."</td>";	
			$html .= "<td>".$user['usr_email']."</td>";				
			
			if(!$user['prjusr_active']) {
				$html .= "
				<td>
					<a style='text-decoration:none' href='index.php?m=Bproject&c=aprovarinscricao&usr_id=".$user['usr_id']."&prj_id=".$prj_id."'><img src='public/imagens/estrutura/tick.gif' border='0'/>".Sistema_I386::getString('msg_allow')."</a> <br/>
					<a style='text-decoration:none' href='index.php?m=Bproject&c=aprovarinscricao&usr_id=".$user['usr_id']."&prj_id=".$prj_id."&remover=1'><img src='public/imagens/estrutura/delete.gif' border='0'/>".Sistema_I386::getString('msg_not_allow')."</a>
				</td>";				
			} else {

				$html .= "
				<td>
				<form action='index.php?m=Bproject&c=updateRole' method='post'>
				".Sistema_Componente_Select::getHtmlSelectArray($array,'prjusr_role',$user['prjusr_role'])."
				<input type='hidden' name='prjusr_id' value='".$user['prjusr_id']."'/>
				<input type='hidden' name='prj_id' value='".$prj_id."'/>
				<input type='submit' value='ok'/>
				</form>";
				
				if($user['prjusr_role'] != ROLE_OWNER){
					$url = "index.php?m=Bproject&c=removeuser&prj_id=".$prj_id."&usr_id=".$user['usr_id'];

					$html .= "
					<label style='float:left; text-decoration:none; cursor:pointer' 
					onClick=\"
					if(confirm('".Sistema_I386::getString('msg_confirm_user_exclude_of_project')."')) 
					{
						window.open('".$url."','janela');
					}\"> <img src='public/imagens/estrutura/delete.gif' border='0'/>".Sistema_I386::getString('msg_remove')."</label>";
				}
				$html .= "</td>";
			}			
			
			$html .= "</tr>";
		}

		$tela->addVar('projectusers',$html);
		$tela->addVar('prj_id',$prj_id);
		$tela->addVar('prj_title',$this->getTitle($prj_id));
		if($prj_id){
			$tela->addVar('menu',self::getOpcoesMenuProjeto($prj_id));
		}
		$this->_layout->setCorpo($tela->getTela());
	}

	/**
	 * saveuserproject
	 * 
	 * @abstract Insere um colaborador dentro do projeto
	 * 
	 * @return void
	 */
	public function saveuserproject()
	{

		# verificar se o cara que esta logado eh o dono do projeto
		$prj_id = Sistema_Variavel::get('prj_id');
		
		$this->ehDono(Sistema_Variavel::get('prj_id'));

		# pega o id do usuario em funcao do mail passado
		$sql = "
		SELECT
			usr_id
		FROM user
		WHERE
			usr_email = '".Sistema_Variavel::get('usr_email')."'";
		
		$usr_id = Sistema_Conecta::select($sql);
		
		if($usr_id[0]['usr_id'] == "")
		{
			$this->_msg->setErro(Sistema_I386::getString('msg_email_not_foud'));
		} else {
			# verifica se o cara ja nao esta cadastrado
			$sql = "
			SELECT
			   usr_id
		   	FROM project_user
	   		WHERE
	   			prj_id = ".Sistema_Variavel::get('prj_id')." 
	   			AND usr_id = ".$usr_id[0]['usr_id'];	
			
			$result = Sistema_Conecta::select($sql);
			
			if(!sizeof($result)){
				# insere o cara como colaborador				
				$project_user = new Backend_Model_Projectuser();
				$project_user->prj_id = Sistema_Variavel::get('prj_id');
				$project_user->prjusr_active = 1;
				$project_user->prjusr_role = ROLE_COLLABORATOR;
				$project_user->usr_id = $usr_id[0]['usr_id'];
	
				if($project_user->save()){
					$this->_msg->setSucesso(Sistema_I386::getString('msg_user_add_in_project'));
				} else {
					$this->_msg->setAlerta(Sistema_I386::getString('msg_user_add_in_project_error'));	
				}
			} else {
				# ja esta cadastrado
				$this->_msg->setAlerta(Sistema_I386::getString('msg_user_alredy_in_project'));
			}
		}
		$url = SISTEMA_URL."index.php?m=Bproject&c=listarusuarios&prj_id=".$prj_id;
		header("Location:".$url);
		die();	
	}

	/**
	 * removeuser
	 * 
	 * @abstract remove o usuario do projeto, o dono nao pode ser removido e o projeto nao pode 
	 * ficar sem dono 
	 * 
	 * @return unknown_type
	 */
	public function removeuser()
	{
		# verificar se o cara que esta logado eh o dono do projeto
		$this->ehDono(Sistema_Variavel::get('prj_id'));
		
		$usr_id = Sistema_Variavel::get('usr_id');
		$prj_id = Sistema_Variavel::get('prj_id');

		$sql = "DELETE FROM project_user WHERE prj_id = ".$prj_id." AND usr_id = ".$usr_id;
		Sistema_Conecta::executa($sql);

		$this->_msg->setSucesso(Sistema_I386::getString('msg_project_user_remove'));

		$url = SISTEMA_URL."index.php?m=Bproject&c=listarusuarios&prj_id=".$prj_id;
		header("Location:".$url);
		die();		
	}
	
	/**
	 * updateRole
	 * 
	 * @abstract Atualiza o papel do usuario dentro do projeto
	 * 
	 * @return unknown_type
	 */
	public function updateRole()
	{
		$prj_id = Sistema_Variavel::get('prj_id');

		# verificar se o cara que esta logado eh o dono do projeto
		$this->ehDono($prj_id);

		$prjusr_id   = Sistema_Variavel::get('prjusr_id');
		$prjusr_role = Sistema_Variavel::get('prjusr_role');
		
		# se dor mudar para colaborador verificar se existe outro dono no projeto
		if($prjusr_role == ROLE_COLLABORATOR)
		{
			$sql = "
			SELECT 
				count(1) as total
			FROM project_user 
			WHERE prj_id = ".$prj_id." AND prjusr_role = '".ROLE_OWNER."'";
			
			$t = Sistema_Conecta::select($sql);
			
			if($t[0]['total'] == 1){
				$this->_msg->setAlerta(Sistema_I386::getString('msg_unique_owner_today'));
				
				$url = SISTEMA_URL."index.php?m=Bproject&c=listarusuarios&prj_id=".$prj_id;
				header("Location:".$url);
				die();		
			}
		}

		$sql = "
		UPDATE project_user SET 
			prjusr_role = '".$prjusr_role."' 
		WHERE prjusr_id = ".$prjusr_id;
		
		Sistema_Conecta::executa($sql);
		
		$this->_msg->setSucesso(Sistema_I386::getString('msg_user_project_update_sucess'));

		$_POST['prj_id'] = Sistema_Variavel::get('prj_id');
		
		$url = SISTEMA_URL."index.php?m=Bproject&c=listarusuarios&prj_id=".$prj_id;
		header("Location:".$url);
		die();		
	}

	# QUESTION
	/**
	 * listQuestion
	 * 
	 * @abstract Lista as questoes ja existentes no projeto, em forma de 
	 * arvore 
	 * 
	 * @return html
	 */
	public function listQuestion()
	{
		$prj_id = Sistema_Variavel::get('prj_id');
		$qst_id = Sistema_Variavel::get('qst_id');

		if(!$prj_id){
			$this->listar();
			return;
		}
		
		if(Sistema_Variavel::get('qst_id')){
			$sqlWhere .= " AND qst_pai = ".Sistema_Variavel::get('qst_id');
			
			$sql = "SELECT * FROM question WHERE qst_id = ".Sistema_Variavel::get('qst_id');
			$q = Sistema_Conecta::select($sql);
			
			$mensagem = "<a href='index.php?m=Bproject&c=listQuestion&prj_id=".$prj_id."&qst_id=".$q[0]['qst_pai']."'>".Sistema_I386::getString('msg_list_question_child_of_question')." ".$q[0]['qst_id']." - ".$q[0]['qst_text']."<a>";			
		}
		
		// pegar as quuestoes do projeto
		$sql = "
		SELECT
			*,
			(select count(1) from question where qst_pai = q.qst_id) as filhos,
			DATE_FORMAT(qst_timestamp, '%d/%m/%Y %H/:%i:%s') as qst_timestamp,
			usr_email,
			qst_type,
			prjusr_role
		FROM question q
			inner join user on	
				user.usr_id = q.usr_id
			INNER JOIN project_user pu ON
				pu.usr_id = user.usr_id AND
				pu.prj_id = ".$prj_id."
		WHERE
			q.prj_id = ".$prj_id."
			".$sqlWhere." 
		ORDER BY qst_pai";
		
		$questions = Sistema_Conecta::select($sql);
		
		if(is_array($questions)){
			foreach($questions as $question){

				$menu_questao = self::getOpcoesMenuQuestao($question['qst_id'],$prj_id);
				
				// se passa o parametro p na url entao eh a questao pai e nao pode trocar o pai dela
				$p = "";
				$star = "";
				if($question['qst_pai'] == 0){				
					$star = "style='background-color:#adf491'";					
				}
				
				if(!$question['filhos']){ 
					$star = "style='background-color:#d7cdfd'";
				}
				
				$html .= "
				<tr ".$star.">
					<td>".$question['qst_id']."</td>
					<td>".$question['qst_text']."</td>
					<td>".$question['filhos']."</td>
					<td>".Sistema_I386::getString("msg_".$question['qst_type'])."</td>
					<td>".$question['qst_timestamp']."</td>
					<td>".$question['usr_email']."</td>
					<td> ".$menu_questao."</td>			
				</tr>";
			}
		}

		$tplFile = SISTEMA_DIR."backend/view/project/list_question.tpl.html";
		$tela = new Sistema_Layout_Tela($tplFile);

		$tela->addVar('prj_title',$this->getTitle($prj_id));
		$tela->addvar('questions',$html);
		$tela->addVar('prj_id',$prj_id);
		
		$sql = "select count(1) as total from question where prj_id = ".$prj_id;
		$aux = Sistema_Conecta::select($sql);
		
		$tela->addVar('num_question',$aux[0]['total']);
		$tela->addVar('prjusr_role',$questions[0]['prjusr_role']);
		
		if($prj_id){
			$tela->addVar('menu',self::getOpcoesMenuProjeto($prj_id));
		}
		
		$tela->addVar('somente_filhos',$mensagem);
		$this->_layout->setCorpo($tela->getTela());
	}

	/**
	 * frmQuestion
	 * 
	 * @abstract formulario para adicionar uma pergunta ao projeto 
	 * 
	 * @return unknown_type
	 */
	public function frmQuestion()
	{
		$prj_id  = Sistema_Variavel::get('prj_id');
		$qst_pai = Sistema_Variavel::get('qst_pai');
				
		if(!$prj_id){
			$url = SISTEMA_URL."index.php?m=Bproject&c=listar";
			header("Location:".$url);
			die();	
		}
		
		# selecionar a questao 
		if(Sistema_Variavel::get('qst_id')){
			$sql = "
			SELECT
				*
			FROM question 
			WHERE
				qst_id = ".Sistema_Variavel::get('qst_id');

			$res = Sistema_Conecta::select($sql);
			$_POST = $res[0];
		}

		$tplFile = SISTEMA_DIR."backend/view/project/question.tpl.html";
		$tela = new Sistema_Layout_Tela($tplFile);

		$sql = "
		SELECT
			qst_id,
			qst_text
		FROM question 
		WHERE
			prj_id = ".$prj_id;

		// se for a primeira pergunta nao mostra o select
		if(!Sistema_Variavel::get('p')){		
			$tela->addVar('select_qst_pai',Sistema_Componente_Select::getHtmlSelectSql($sql,'qst_pai',$qst_pai,false));
		} else {
			$tela->addVar('select_qst_pai',Sistema_I386::getString('msg_first_question'));
		}

		# tipo da resposta
		$a['txt'] = Sistema_I386::getString('msg_txt');
		$a['img'] = Sistema_I386::getString('msg_img');
		
		$tela->addVar('select_qst_type',Sistema_Componente_Select::getHtmlSelectArray($a,'qst_type',Sistema_Variavel::get('qst_type'),false));		
		$tela->addVar('prj_id',$prj_id);
		$tela->addVar('prj_title',$this->getTitle($prj_id));

		if(Sistema_Variavel::get('qst_id','POST')){
			$menu = self::getOpcoesMenuQuestao(Sistema_Variavel::get('qst_id','POST'), $prj_id);
		}

		if($prj_id){
			$menu .= self::getOpcoesMenuProjeto($prj_id);
		}

		$tela->addVar('menu',$menu);

		# se for a questao root entao nao tem que fazer escolha do tipo
		# pois a root sempre tem que ser um texto
		if($qst_pai)
		{
			# pega o tipo dos filhos, se for img aparece o campo para inserir a imagem
			$sql = "
			SELECT
				qst_type
			FROM question 
			WHERE
				qst_id = ".$qst_pai;
	
			$type = Sistema_Conecta::select($sql);
		} else {
			$type[0] = "txt";
		}
		
		$tela->addVar("type",$type[0]['qst_type']);
				
		$this->_layout->setCorpo($tela->getTela());
	}

	/**
	 * saveQuestion
	 * 
	 * @abstract salva uma pergunta ao projeto 
	 *   
	 * @return unknown_type
	 */
	public function saveQuestion()
	{
		$question = new Backend_Model_Question();
		$question->qst_id = Sistema_Variavel::get('qst_id');
		$question->qst_type = Sistema_Variavel::get('qst_type');
		$question->qst_text = Sistema_Variavel::get('qst_text');
		$question->qst_pai = Sistema_Variavel::get('qst_pai');
		$question->qst_relevance = Sistema_Variavel::get('qst_relevance');
		$question->prj_id = Sistema_Variavel::get('prj_id');
		$question->usr_id = Sistema_Login::getId();
		
		$qst_id = $question->save();

		if($qst_id){
			$this->_msg->setSucesso(Sistema_I386::getString('msg_question_save_sucess'));
		} else {
			$this->_msg->setErro(Sistema_I386::getString('msg_question_save_error'));
		}	
		
		$url = SISTEMA_URL."index.php?m=Bproject&c=frmQuestion&prj_id=".Sistema_Variavel::get('prj_id')."&qst_id=".$qst_id."&qst_pai=".Sistema_Variavel::get('qst_pai');
		header("Location:".$url);
		die();			
	}

	public function delQuestion()
	{
		$qst_id = Sistema_Variavel::get('qst_id');
		$prj_id = Sistema_Variavel::get('prj_id');
		$this->ehDono($prj_id);
		$question = new Backend_Model_Question();
		$question->remove($qst_id); 

		$url = SISTEMA_URL."index.php?m=Bproject&c=listQuestion&prj_id=".$prj_id;
		header("Location:".$url);
		die();
	}

	public function tree()
	{
		$tplFile = SISTEMA_DIR."backend/view/project/tree.tpl.html";
		$tela = new Sistema_Layout_Tela($tplFile);		

		$this->_layout->includeJavaScript(SISTEMA_URL."public/javascript/dtree/dtree.js");	
		$this->_layout->includeCss(SISTEMA_URL."public/javascript/dtree/dtree.css");

		$prj_id = Sistema_Variavel::get('prj_id');

		$sql = " 
		SELECT
			qst_id,
			qst_text,
			prj_title
		FROM question 
			INNER JOIN project ON
				project.prj_id = question.prj_id
		WHERE
			qst_pai = 0 AND
			question.prj_id = ".$prj_id;
		
		$qst_pai = Sistema_Conecta::select($sql);

		if(!sizeof($qst_pai)){
			$this->_msg->setErro(Sistema_I386::getString('msg_first_question_not_found'));			
		} else {
			// selecionar todos as questoes do projeto
			$sql = "
			SELECT
				qst_id,
				qst_pai,
				qst_text
			FROM question 
			WHERE
			 	qst_pai <> 0 AND
				prj_id = ".$prj_id;
			
			$questions = Sistema_Conecta::select($sql);
			
			if(is_array($questions)){
				foreach($questions as $q){
					$url = "index.php?m=Bproject&c=frmQuestion&prj_id=".$prj_id."&qst_id=".$q['qst_id']."&qst_pai=".$q['qst_pai'];
					$node .= "d.add(".$q['qst_id'].",".$q['qst_pai'].",'".$q['qst_text']."','".$url."');\n";
				}
			}
			
			$js = "
			<script type='text/javascript'>
				<!--
		
				d = new dTree('d');
		
				d.add(".$qst_pai[0]['qst_id'].",-1,'".$qst_pai[0]['qst_text']."','index.php?m=Bproject&c=frmQuestion&prj_id=".$prj_id."&qst_id=".$qst_pai[0]['qst_id']."&p=1');
				".$node."
				document.write(d);
				//-->
			</script>";
			
			$tela->addVar("js",$js);
		}


		$sql = "SELECT prj_title FROM project WHERE prj_id = ".$prj_id;
		$titulo = Sistema_Conecta::select($sql);
		
		$tela->addVar('prj_title',$titulo[0]['prj_title']);
			
		$tela->addVar("prj_id",$prj_id);

		if($prj_id){
			$tela->addVar('menu',self::getOpcoesMenuProjeto($prj_id));
		}

		$this->_layout->setCorpo($tela->getTela());
	}

	/**
	 * localizarProjeto
	 * 
	 * @abstract Localiza um projeto, esta acao eh chamada qnd se clica no botao
	 * localizar dentro do admin, vai ter um botao para que a pessoa faca sua
	 * inscricao no projeto.
	 */	
	public function localizarProjeto()
	{		
		$tplFile = SISTEMA_DIR."backend/view/project/find_list_project.tpl.html";
		$tela = new Sistema_Layout_Tela($tplFile);
				
		$s = Sistema_Variavel::get('search');
		
		$sql = "
		SELECT
			project.prj_id,
			prj_title,
			usr_name,
			prj_published
		FROM project 
			INNER JOIN project_user pu ON
				pu.prj_id = project.prj_id AND
				prjusr_role = '".ROLE_OWNER."'
			INNER JOIN user ON
				user.usr_id = pu.usr_id				
		WHERE
			prj_title like '%".$s."%' OR 
			prj_objetive like '%".$s."%' OR 
			prj_shortname like '%".$s."%'
		ORDER BY prjusr_id ASC";
		
		$projects = Sistema_Conecta::select($sql);
		
		foreach($projects as $project)
		{
			$html .= "<tr>";
			$html .= "<td>".$project['prj_id']."</td>";
			$html .= "<td>".$project['prj_title']."</td>";
			$html .= "<td>".$project['usr_name']."</td>";
			
			$status = $project['prj_published'] == 1 ? Sistema_I386::getString('msg_yes') : Sistema_I386::getString('msg_no');
			$html .= "<td>".$status."</td>";
			
			$html .= "<td><a href='index.php?m=Bproject&c=entrarprojeto&prj_id=".$project['prj_id']."'>".Sistema_I386::getString('msg_request_signin_project')."</a></td>";

			$html .= "</tr>";
		}

		$tela->addVar("projects",$html);
		$this->_layout->setCorpo($tela->getTela());				
	}	
	
	/**
	 * entrarprojeto
	 * 
	 * @abstract Solicitar a entrada em um projeto
	 */
	public function entrarprojeto()
	{

		$usr_id = Sistema_Login::getId();
		
		# verifica se o cara ja nao esta cadastrado
		$sql = "
		SELECT
		   usr_id
	   	FROM project_user
   		WHERE
   			prj_id = ".Sistema_Variavel::get('prj_id')." 
   			AND usr_id = ".$usr_id;	
		
		$result = Sistema_Conecta::select($sql);
		
		if(!sizeof($result)){
			# inserir na tabela project_user o usuario que esta logado, inativo e como colaborador
			$pu = new Backend_Model_Projectuser();
			$pu->prj_id = Sistema_Variavel::get('prj_id');
			$pu->prjusr_active = 0;
			$pu->prjusr_role = ROLE_COLLABORATOR;
			$pu->usr_id = Sistema_Login::getId();
			
			if($pu->save()){
				$this->_msg->setSucesso(Sistema_I386::getString('msg_user_add_in_project_wait_confirmatio'));
			} else {
				$this->_msg->setAlerta(Sistema_I386::getString('msg_user_add_in_project_error'));	
			}
		} else {
			# ja esta cadastrado
			$this->_msg->setAlerta(Sistema_I386::getString('msg_user_alredy_in_project'));
		}

		$url = SISTEMA_URL."index.php?m=Bproject&c=listar";
		header("Location:".$url);
		die();
	}
	
	public function aprovarinscricao()
	{
		$this->ehDono(Sistema_Variavel::get('prj_id'));
		
		$remover = Sistema_Variavel::get('remover');
		
		if(!$remover){
			$sql = "UPDATE project_user set prjusr_active = 1  
			WHERE  
				prj_id = ".Sistema_Variavel::get('prj_id')." AND
				usr_id = ".Sistema_Variavel::get('usr_id');
		} else {
			$sql = "DELETE FROM project_user  
			WHERE  
				prj_id = ".Sistema_Variavel::get('prj_id')." AND
				usr_id = ".Sistema_Variavel::get('usr_id');			
		}
		$a = Sistema_Conecta::executa($sql);
		
		if($a){		
			$this->_msg->setSucesso(Sistema_I386::getString('msg_success'));
		} else {
			$this->_msg->setErro(Sistema_I386::getString('msg_error'));
		}

		$url = SISTEMA_URL."index.php?m=Bproject&c=listarusuarios&prj_id=".Sistema_Variavel::get('prj_id');
		header("Location:".$url);
		die();		
	}
	
	/**
	 * ehDono
	 * 
	 * @abstract verifica se o usuuario que esta logado e tentando realizar alguma acao 
	 * que requer ser o dono para realizar realmente o eh.
	 * 
	 * @param $prj_id
	 * 
	 * @return bool
	 */
	private function ehDono($prj_id)
	{
		$usr_id = Sistema_Login::getId();
		
		$sql = "SELECT usr_id FROM project_user WHERE prj_id = ".$prj_id." AND prjusr_role = '".ROLE_OWNER."'";
		
		$a = Sistema_Conecta::select($sql);

		# se nao for o dono para tudo 
		if(!$a[0]['usr_id']){
			die("You aren't owner of this project");
		}
	}
	
	/**
	 * getTitle
	 * 
	 * @abstract 
	 * 
	 * @param $prj_id Id do projeto
	 * @return void
	 */
	private function getTitle($prj_id)
	{
		$sql = "SELECT prj_title FROM project WHERE prj_id = ".$prj_id;
		$t = Sistema_Conecta::select($sql);		
		return $t[0]['prj_title'];
	}

	/**
	 * managerUserperfil
	 * 
	 * @abstract formul�rio para gerenciar os dados do usuario e a sua senha  
	 * 
	 * @return HTML
	 */
	public function managerUserperfilfrm()
	{
		$cod = Sistema_Login::getId();

		$tplFile = SISTEMA_DIR."backend/view/user/managerperfilfrm.tpl.html";
		$tela = new Sistema_Layout_Tela($tplFile);
		
		$sql = "SELECT * FROM user WHERE usr_id = ".Sistema_Login::getId();
		
		$user = Sistema_Conecta::select($sql);
		
		$tela->addVar('usr_name',$user[0]['usr_name']);
		$tela->addVar('usr_email',$user[0]['usr_email']);
		$tela->addVar('usr_urlcurriculum',$user[0]['usr_urlcurriculum']);
		
		$this->_layout->setCorpo($tela->getTela());
	}
	
	/**
	 * managerUserperfilsave
	 * 
	 * @abstract salvar perfil do usuario e a senha
	 * 
	 * @return unknown_type
	 */
	public function manageruserperfilsaver()
	{
		$msg = Sistema_Mensagem::instanciar();

		# verificar se a senha eh a atual
		$sql = "
		SELECT
			*
		FROM user
		WHERE
			usr_id = ".Sistema_Login::getId();

		$usuario = Sistema_Conecta::select($sql);

		$a = $usuario[0];
	
		# verifica se as duas outras senhas sao iguais
		if(sha1(Sistema_Variavel::get('oldPass')) != $a['usr_password']){
			$msg->setErro(Sistema_I386::getString('msg_old_password_wrong'));
		} else if(trim(Sistema_Variavel::get('newPass'))==""){
			$msg->setErro(Sistema_I386::getString('msg_empty_password'));
		} else if(trim(Sistema_Variavel::get('newPass')) != trim(Sistema_Variavel::get('rePass'))){
			# se for a senha entao muda no banco de dados
			$msg->setErro(Sistema_I386::getString('msg_pass_repass_not_mach'));
		} else { 
			$sql = "UPDATE user SET usr_password = '".sha1(trim(Sistema_Variavel::get('newPass')))."'";
			$a = Sistema_Conecta::executa($sql);
			if($a){
				$msg->setSucesso(Sistema_I386::getString('msg_success_change_pass'));
			} else {
				$msg->setErro(Sistema_I386::getString('msg_error_change_pass'));	
			}
		}
		
		$url = SISTEMA_URL."index.php?m=Bproject&c=managerUserperfilfrm";
		header("Location:".$url);
		die();
	}
	
	public function manageruserperfildatasaver()
	{
		$sql = "
		UPDATE user SET 
			usr_name = '".trim(Sistema_Variavel::get('usr_name'))."',
			usr_email = '".trim(Sistema_Variavel::get('usr_email'))."',
			usr_urlcurriculum  = '".trim(Sistema_Variavel::get('usr_urlcurriculum'))."'
		WHERE
			usr_id = ".Sistema_Login::getId();

		$a = Sistema_Conecta::executa($sql);

		$msg = Sistema_Mensagem::instanciar();
		
		if($a){
			$msg->setSucesso(Sistema_I386::getString('msg_success'));
		} else {
			$msg->setErro(Sistema_I386::getString('msg_error'));	
		}
		$url = SISTEMA_URL."index.php?m=Bproject&c=managerUserperfilfrm";
		header("Location:".$url);
		die();
	}

	public function leaveproject()
	{
		
		$usr_id = Sistema_Login::getId();
		$prj_id = Sistema_Variavel::get('prj_id');
		
		if($usr_id && $prj_id){
			$sql = "DELETE FROM project_user WHERE  usr_id = ".$usr_id." AND prj_id = ".$prj_id;
			$a = Sistema_Conecta::executa($sql);
			
			$msg = Sistema_Mensagem::instanciar();
			
			if($a){
				$msg->setSucesso(Sistema_I386::getString('msg_success'));
			} else {
				$msg->setErro(Sistema_I386::getString('msg_error'));	
			}				

			$url = SISTEMA_URL."index.php?m=Bproject&c=listar";
			header("Location:".$url);
			die();			
		}
		
		$url = SISTEMA_URL."index.php?m=Ffront&c=index";
		header("Location:".$url);
		die();
	}

	/**
	 * removeallquestions
	 * 
	 * @abstract remove todas as quest�es do projeto 
	 * 
	 * @return void
	 */
	public function removeallquestions()
	{
		$prj_id = Sistema_Variavel::get('prj_id');
		
		$msg = Sistema_Mensagem::instanciar();
		
		$this->ehDono($prj_id);
		
		$sql = "DELETE FROM question WHERE prj_id = ".$prj_id;

		if(Sistema_Conecta::executa($sql)){
			$msg->setSucesso(Sistema_I386::getString('msg_all_questions_removed_sucess'));
		} else {
			$msg->setErro(Sistema_I386::getString('msg_error'));
		}

		$url = SISTEMA_URL."index.php?m=Bproject&c=listQuestion&prj_id=".$prj_id;
		header("Location:".$url);
		die();
	}
	
	/**
	 * externallink
	 * 
	 * @abstract mostra como se sontruir um link externo 
	 * 
	 * @return HTML
	 */
	public function externallink()
	{
		$prj_id = Sistema_Variavel::get('prj_id');

		$tplFile = SISTEMA_DIR."backend/view/project/externallink.tpl.html";
		$tela = new Sistema_Layout_Tela($tplFile);		

		$sql = "SELECT * FROM project WHERE prj_id = ".$prj_id;
		$project = Sistema_Conecta::select($sql);

		$url = SISTEMA_URL."index.php?m=Ffront&c=consult&s=".$project[0]['prj_shortname']."&externo=on";		
		$html = "&lt;iframe src='".$url."' border=0 width=970 height=600&gt;&lt;/iframe&gt;";

		$tela->addVar('html',$html);
		$tela->addVar('prj_id',$prj_id);
		$tela->addVar('prj_title',$project[0]['prj_title']);
		$tela->addVar('menu',self::getOpcoesMenuProjeto($prj_id));

		$this->_layout->setCorpo($tela->getTela());
	}

	/**
	 * showStatistcs
	 * 
	 * @abstract Mostra as estat�sticas
	 *  
	 * - Numero de vezes que o projeto foi consultado
	 * - Quest�es respondidas
	 * 
	 * @return HTML
	 */
	public function statistcs()
	{
		$prj_id = Sistema_Variavel::get('prj_id');

		$tplFile = SISTEMA_DIR."backend/view/project/statistcs.tpl.html";
		$tela = new Sistema_Layout_Tela($tplFile);

		# total de consultas no projeto
		$sql = "SELECT * FROM project WHERE prj_id = ".$prj_id;
		$project = Sistema_Conecta::select($sql);
		$project = $project[0];
		$tela->addVar("projectConsult",$project['prj_numconsult']);

		$sql = "
		SELECT
			qst_text,
			qst_numconsult,
			(select count(1) from question q2 WHERE q2.qst_pai = q1.qst_id) as filhos
		FROM question q1
		WHERE
			prj_id = ".$prj_id."
		HAVING filhos = 0"; 

		$filhos = Sistema_Conecta::select($sql);

		if(is_array($filhos)){
			foreach($filhos as $k=>$v){
				$html .= "<tr>";
				$html .= "<td>".$v['qst_text']."</td>";
				$html .= "<td style='text-align:center'>".$v['qst_numconsult']." ".Sistema_I386::getString('msg_times')."</td>";
				$html .= "</tr>";
			}
		}

		$tela->addVar('respostas',$html);

		$tela->addVar('prj_id',$prj_id);
		$tela->addVar('prj_title',$project['prj_title']);

		$tela->addVar('menu',self::getOpcoesMenuProjeto($prj_id));

		$this->_layout->setCorpo($tela->getTela());
	}

	/**
	 * getOpcoesMenuProjeto
	 * 
	 * @abstract monta um SELECT com as a��es poss�veis de um determinado projeto
	 * 
	 * @param $prj_id
	 * 
	 * @return HTML
	 */
	public static function getOpcoesMenuProjeto($prj_id)
	{

		$sql = "
		SELECT 
			* 
		FROM project
			INNER JOIN project_user pu ON
		   		pu.prj_id = project.prj_id
	    WHERE
	       pu.usr_id = ".Sistema_Login::getId()." AND 
		   project.prj_id = ".$prj_id;
			
		$v = Sistema_Conecta::select($sql);
		$v = $v[0];
		
		$html = "
		<em class='btnOpcoes' onClick=\"habilita('menu_".$prj_id."')\">".Sistema_I386::getString('msg_options_of_project')."</em>
		<ul id='menu_".$prj_id."' class='menu_projeto'>";
		$html .= "		
		<li><a href='index.php?m=Ffront&c=consult&s=".$v['prj_shortname']."&aceita=on'><img src='public/imagens/estrutura/cog.gif'/>".Sistema_I386::getString('msg_test')."</a></li>
		<li><a href='index.php?m=Bproject&c=tree&prj_id=".$v['prj_id']."'><img src='public/imagens/estrutura/chart_organisation.gif'/>".Sistema_I386::getString('msg_view_tree')."</a><li>";

		if($v['prjusr_role'] == ROLE_OWNER) {					
			// se o projeto esta mostra o inativa, se ta inativo mostra o ativar
			if($v['prj_published']){
				$html .= "				
				<li><a href='index.php?m=Bproject&c=altearStatusPublicacao&prj_id=".$v['prj_id']."'><img src='public/imagens/estrutura/delete.gif' border='0'/>".Sistema_I386::getString('msg_deactive')."</a></li>				
				";
			} else {
				$html .= "
				<li><a href='index.php?m=Bproject&c=listQuestion&prj_id=".$v['prj_id']."'><img src='public/imagens/estrutura/application_view_list.gif'/>".Sistema_I386::getString('msg_manager_question')."</a></li>
				<li><a href='index.php?m=Bproject&c=altearStatusPublicacao&prj_id=".$v['prj_id']."'><img src='public/imagens/estrutura/tick.gif' width='16' height='16' />".Sistema_I386::getString('msg_active')."</a></li>";							
			}

			$html .= "
			<li><a href='index.php?m=Bproject&c=statistcs&prj_id=".$v['prj_id']."'><img src='public/imagens/estrutura/chart_line.gif' border='0'/>".Sistema_I386::getString('msg_view_statistcs')."</a></li>
			";

			# verificar se existe alguem esperando aprova��o para ser membro do projeto
			$sql = "SELECT count(1) as inativos FROM project_user WHERE prj_id = ".$v['prj_id']." AND prjusr_active = 0";
			$user_inativos = Sistema_Conecta::select($sql);
			
			$i = "";
			if($user_inativos[0]['inativos']){
				$i = " (".$user_inativos[0]['inativos'].")";
			}
						
			if($v['prj_published'] == false){
				$html .= "
				<li><a href='index.php?m=Bproject&c=formulario&prj_id=".$v['prj_id']."'><img src='public/imagens/estrutura/pencil.gif' border='0'/>".Sistema_I386::getString('msg_edit')."</a></li>					
				<li><a href='index.php?m=Bproject&c=listarusuarios&prj_id=".$v['prj_id']."'><img src='public/imagens/estrutura/user_edit.gif' border='0'/>".Sistema_I386::getString('msg_manager_users').$i."</a></li>";
			}
		} else {
			// se for um colaborador e nao estiver publicado entao deixa ele gerenciar as quest�es
			if($v['prj_published'] == false){
				$html .= "<li><a href='index.php?m=Bproject&c=listQuestion&prj_id=".$v['prj_id']."'><img src='public/imagens/estrutura/application_view_list.gif'/>".Sistema_I386::getString('msg_manager_question')."</a></li>";
			}
			
			$html .= "<li><a href='index.php?m=Bproject&c=leaveproject&prj_id=".$v['prj_id']."'><img src='public/imagens/estrutura/user_delete.png'/>".Sistema_I386::getString('msg_leave_project')."</a></li>";
		}
		
		$html .= "<li><a href='index.php?m=Bproject&c=externallink&prj_id=".$v['prj_id']."'><img src='public/imagens/estrutura/link.png'/>".Sistema_I386::getString('msg_external_link')."</a></li>";
		
		$html .= "<li class='fechar_menu' onClick='fecharMenu()'>".Sistema_I386::getString('msg_close_menu')." [ x ] </li>";
		$html .= "</ul>";

		return $html;
	}
	
	/**
	 * getOpcoesMenuQuestao
	 * 
	 * @abstract monta o menu de contexto das questoes
	 * 
	 * @param $qst_id
	 * 
	 * @return HTML
	 */
	public static function getOpcoesMenuQuestao($qst_id, $prj_id)
	{
		$html = "";
		
		$sql = "
		SELECT 
			q1.*,
			(select count(1) from question q2 WHERE q2.qst_pai = q1.qst_id) as filhos 
		FROM question q1 				 
		WHERE q1.qst_id = ".$qst_id;
		$question = Sistema_Conecta::select($sql);
		$question = $question[0]; 

		if($question['filhos'] > 0){ 
			$a = "<li><a href='index.php?m=Bproject&c=listQuestion&prj_id=".$prj_id."&qst_id=".$question['qst_id']."'><img src='public/imagens/estrutura/sitemap.png' border='0'/>".Sistema_I386::getString('msg_show_sun')."</a></li>"; 
		}

		if($question['qst_pai'] != 0){
			$irmao = "<li><a href='index.php?m=Bproject&c=frmQuestion&prj_id=".$prj_id."&qst_pai=".$question['qst_pai']."'><img src='public/imagens/estrutura/arrow_right.png' border='0'/>".Sistema_I386::getString('msg_brother_question')."</a></li>";
		} else {
			$p = "&p=1";
		}

		$html .= "
		<em class='btnOpcoes' onClick=\"habilita('qst_".$question['qst_id']."')\">".Sistema_I386::getString('msg_options_of_question')."</em>
			<ul id='qst_".$question['qst_id']."' class='menu_projeto'>
				<li><a href='index.php?m=Bproject&c=frmQuestion&prj_id=".$prj_id."&qst_id=".$question['qst_id']."&qst_pai=".$question['qst_pai'].$p."'><img src='public/imagens/estrutura/pencil.gif' border='0'/>".Sistema_I386::getString('msg_edit')."</a></li>					
				".$a."</li>
				<li><a href='index.php?m=Bproject&c=frmQuestion&prj_id=".$prj_id."&qst_pai=".$question['qst_id']."'><img src='public/imagens/estrutura/arrow_down.png' border='0'/>".Sistema_I386::getString('msg_sun_question')."</a></li>
				".$irmao."</li>
				<li><a href='index.php?m=Bproject&c=delQuestion&prj_id=".$prj_id."&qst_id=".$question['qst_id']."'><img src='public/imagens/estrutura/delete.gif' border='0'/>".Sistema_I386::getString('msg_remove')."</a></li>
				<li class='fechar_menu' onClick='fecharMenu()'>".Sistema_I386::getString('msg_close_menu')." [x]</li>
			</ul>
			</em>";				
		
		return $html;		
	}
}
?>